Skip to content
On this page

Performance

성능 최적화의 딜레마

  • 기술의 단점 중에서 성능을 이야기하는 것은 아주 특별한 전제를 상세하게 깔고 이야기하지 않으면 아무 의미없다.
    • JPA는 JDBC보다 평균 10%느리다는 단점이 있다 하지만 개발 생산성을 올려서 비용을 줄일 수 있다. 오히려 줄어든 비용으로 10% 더 성능이 좋은 서버를 사용하면된다.
    • 추상 클래스를 상속하는 것과 인터페이스를 구현해서 쓰는 것과 그냥 클래스에 모든 구현을 넣는 것을 비교해보면 인터페이스가 가장 느리다. 그렇다고 개발할 때 인터페이스를 사용하지 않는가?
  • 성능을 따져야 하는 상황이 있고, 성능을 고민해야하는 기술이 있긴하다. 하지만 다른 사람들이 많이 사용하는 유명한 기술을 사용하는데 있어서 그런 고민은 시간 낭비일 수 있다.
    • 대신 서버의 처리 능력이 떨어지는 증상이 보일 때 그런 순간에 파고들 수 있으면 된다. (비싼 APM을 사용하면 어디서 성능이 저하되고 있는지 다 찾아준다, 그 때 대안을 찾아도 늦지 않는다)
  • 대부분의 온라인 서비스에서 성능의 90%는 DB 관련된 부분에서 좌우된다.
    • 스프링으로 구현된 서버가 CPU 100%에 도달하는 경우 서비스 초대박이 난것이라고 생각하고 서버를 늘리면된다.
    • DB는 공유 자원인데다가 대체로 느려서 조금만 잘못해도 절대적인 성능에 영향을 주는데 비해서 AOP 같은 기술에 성능을 따지고 있을 시간이 없다.
      • JDK Dynamic Proxy vs CGLib Proxy와 같은 영상이나 글에서 프록시 구현 기술의 성능에 대해 이야기하기도하지만, 나노 세컨 단위의 차이를 가지고 논하는 것은 의미없다.
    • 일례로 안드로이드 초창기에는 런타임에 오브젝트를 만들지 말라고 모든 클래스 메서드를 static으로 만들기도하고 인터페이스 사용도 지양했지만 현재는 기기의 성능이 좋아져서 그러한 이야기가 전혀 없다.
Edit this page
Last updated on 3/13/2023